/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#include "pch.h"
#include "函数代码解析.h"
#include "块代码解析.h"

S_函数声明代码 f_函数声明代码块解析(std::vector<std::u16string>::iterator& it
                    , std::vector<std::u16string>::iterator& end
                    ) {
    S_函数声明代码 函数声明代码;
    函数声明代码.函数名称 = *it;
    ++it;

    if (it != end && *it == u"(") {
        函数声明代码.输入参数 = f_括号域(it, end, u"(", u")");
    }
    if (it != end && *it == u"(") {
        函数声明代码.输出参数 = f_括号域(it, end, u"(", u")");
    }
    return 函数声明代码;
}

void f_函数代码块解析(std::vector<std::u16string>::iterator& it
                    , std::vector<std::u16string>::iterator& end
                    , S_函数代码块& 函数代码) {
    函数代码.函数声明 = f_函数声明代码块解析(it, end);
    
    if (it != end && *it == u"{") {
        函数代码.函数实现 = f_括号域(it, end, u"{", u"}");
    }
}


void f_成员函数解析(std::vector<std::u16string>::iterator& it
                    , std::vector<std::u16string>::iterator& end
					, S_成员函数代码块 成员函数代码块
                    ) {
    //S_成员函数代码块* 成员函数代码 = new S_成员函数代码块;
	成员函数代码块.虚函数表名称 = *it;
    ++it;

    //绑定虚函数
    if (it != end && *it == u"for") {
		成员函数代码块.绑定结构名称 = f_代码切片(it, end, u"{");
        f_符号分割(成员函数代码块.绑定结构名称, u",");
    }

    if (it != end && *it == u"{") {
        auto 函数实现 = f_括号域(it, end, u"{", u"}");

        auto fnEnd = 函数实现.end();
        for(auto fnIt = 函数实现.begin(); fnIt != fnEnd; ++fnIt) {
            if(*fnIt == u"fn") {
                ++fnIt;

                auto* 函数代码块 = new S_函数代码块;
                f_函数代码块解析(fnIt, fnEnd, *函数代码块);
                //函数代码块->函数名称
				成员函数代码块.函数体块.push_back(函数代码块);
            }
            else{
                break;
            }
        }
    }
}


void f_函数实现解析(std::vector<std::u16string>::iterator& it
                , std::vector<std::u16string>::iterator& end){
    if(it == "if") {

    }
    if(it == "switch") {
        
    }
    if(it == "for") {
        
    }
    if(it == "loop") {
        
    }
}


